let express = require('express');
let router = express.Router();

const db = require('../db');
const pageMap = require('../page_map');
const { jwt, jwtKey } = require('../server_jwt');

/* GET users listing. */
// router.get('/login', function(req, res) {
//   res.send('respond with a resource');
// });

router.post('/login', function (req, res) {
    // 查询的sql语句
    const sql_query = 'select * from users where phone=? and password=?'
    const phone = req.body.userPhone;  // 用户的账号
    const pswd = req.body.password;    // 用户的密码

    if (!phone) {
        res.send({msg: "账号为空"});
        return ;
    } else if (!pswd) {
        res.send({msg: "密码为空"});
        return ;
    }

    db.query(sql_query, [phone, pswd], (err, result) => {
        if (err) throw err;
        if (result.length > 0) {
            let uid = result[0].uid;
            // 登录成功生成jwt
            let token = jwt.sign({uid}, jwtKey, {expiresIn: '168h'});  // 时间设置为一周登录一次
            // 设置Authorization头部 为 jwt 的值
            res.setHeader('Authorization', `${token}`);
            res.send({msg: '登录成功', jmp_url: '/main.html'});
        } else {
            // 登录失败
            res.send({msg: "账号或密码错误"});
        }
    });
});

router.post('/login_again', function (req, res) {
    // 在 Authorization 请求头 获取 jwt 的值
    const token = req.headers['authorization'];
    // 验证 jwt
    jwt.verify(token, jwtKey, (err, decoded) => {
        if (err) {
            // 解析 jwt 出现错误
            res.send({msg: "登录验证失败，请重新登录", login: false});
        } else if (parseInt(+new Date() / 1000) >= decoded.exp) {
            // jwt 登录超时，需要重新登录
            res.send({msg: "登录超时:", login: false});
        } else {
            // 查找需要返回的页面
            let page_name = req.headers['referer'];
            let page_data = pageMap(page_name);
            // jwt 认证成功 (严谨一点需要去数据库里查找这个用户是否存在才行)
            res.send({msg: "认证登录成功:", login: true, new_html: page_data});
        }
    });
});

module.exports = router;
